package com.whjfxx.terminal.utils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.whjfxx.terminal.biz.param.SearchParam;
import com.whjfxx.terminal.biz.param.UserPageParam;
import com.whjfxx.terminal.commons.Result;
import org.apache.commons.collections4.CollectionUtils;

import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;

/**
 * Created by b.c on 2022/5/11 9:01
 */
public class PageUtils {

    /**
     * convert
     * @param page
     * @param targetClass
     * @param <T>
     * @return
     */
    public static <T> Page<T> convert(Page<?> page, Class<T> targetClass) {
        return convert(page, targetClass, null);
    }

    /**
     * convert
     * @param page
     * @param targetClass
     * @param biConsumer
     * @param <S>
     * @param <T>
     * @return
     */
    public static <S, T> Page<T> convert(Page<S> page, Class<T> targetClass, BiConsumer<S, T> biConsumer) {
        Page<T> newPage = new Page();
        newPage.setCurrent(page.getCurrent());
        newPage.setTotal(page.getTotal());
        newPage.setSize(page.getSize());
        newPage.setPages(page.getPages());
        if (CollectionUtils.isNotEmpty(page.getRecords())) {
            List<T> list = BeanUtils.copyList(page.getRecords(), targetClass, biConsumer);
            newPage.setRecords(list);
        }
        return newPage;
    }

    /**
     * 转换空的Page对象
     * @param page
     * @return
     */
    public static <P extends Page<?>, T> Page<T> convertEmpty(P page) {
        Page<T> newPage = new Page();
        newPage.setCurrent(page.getCurrent());
        newPage.setTotal(page.getTotal());
        newPage.setSize(page.getSize());
        newPage.setPages(page.getPages());
        newPage.setRecords(Collections.emptyList());
        return newPage;
    }

//    /**
//     * convert
//     * @param page
//     * @param targetClass
//     * @param biConsumer
//     * @param <S>
//     * @param <T>
//     * @return
//     */
//    public static <S, T> Result<List<T>> convert2Result(Page<S> page, Class<T> targetClass, BiConsumer<S, T> biConsumer) {
//        if (CollectionUtils.isEmpty(page.getRecords())) {
//            return Result.success(Collections.emptyList(), 0L);
//        }
//        List<T> list = BeanUtils.copyList(page.getRecords(), targetClass, biConsumer);
//        return Result.success(list, page.getSize());
//
//    }
//
//    /**
//     * convert
//     * @param page
//     * @param <T>
//     * @return
//     */
//    public static <T> Result<List<T>> convert2Result(Page<T> page) {
//        if (CollectionUtils.isEmpty(page.getRecords())) {
//            return Result.success(Collections.emptyList(), 0L);
//        }
//        return Result.success(page.getRecords(), page.getSize());
//    }



    public static final <T> Page<T> buildPage(Page<?> page) {
        Page<T> pageT = new Page<>();
        org.springframework.beans.BeanUtils.copyProperties(page, pageT);
        return pageT;
    }
}
